/***************************************************************************
 *   Copyright (C) 2007 by Warren Kenny   *
 *   warren.kenny@gmail.com   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#include <otaPacketProcessor.h>

otaPacketProcessor::otaPacketProcessor()
{
}

bool otaPacketProcessor::deserialize( 	const char *data, 
			unsigned int dataSize, 
   			const unsigned int offset, 
      			unsigned int &newOffset, 
	 		otaEthernetHeader &ethernetHeader, 
    			otaIPHeader &ipHeader, 
       			otaTCPHeader &tcpHeader )
{
	bool ok = (	ethernetHeader.deserialize( data, dataSize, offset, newOffset ) &&
			ipHeader.deserialize( data, dataSize, newOffset, newOffset ) );
	
	ok = ok && ( ipHeader.getProtocol() == OTA_IP_PROTOCOL_TCP );
	
	if(ok)
	{
		ok = ok && tcpHeader.deserialize( data, dataSize, newOffset, newOffset );
	}
	else
	{
		std::cout << "Non-TCP";
	}
	
	return ok;	
}
    
bool otaPacketProcessor::serialize( 	char *data, 
			unsigned int dataSize, 
   			const unsigned int offset, 
      			unsigned int &newOffset, 
	 		otaEthernetHeader ethernetHeader, 
    			otaIPHeader ipHeader, 
       			otaTCPHeader tcpHeader, 
	  		const char *payload, 
     			const unsigned int payloadSize )
{
	bool ok = (	ethernetHeader.serialize( data, dataSize, offset, newOffset ) &&
			ipHeader.serialize( data, dataSize, newOffset, newOffset ) &&
			tcpHeader.serialize( data, dataSize, newOffset, newOffset ) &&
			otaBytePacker::bufferCopy( data, dataSize, newOffset, newOffset, static_cast<const void*>(payload), payloadSize ) );	
	
	return ok;
	
}

otaPacketProcessor::~otaPacketProcessor()
{
}


